package cc.verywell.pureblock.msg.nfs;

import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

import cc.verywell.pureblock.func.node.KeyShell;

/**
* 
* Copyright © 2019 TanYaqiu. All rights reserved.
* @author TanYaqiu 
* @address flat 601
* @date 2019年4月25日 下午9:42:58
*/
public interface NfsControler {

	/**
	 * 分发文件及最终合并程序 <br>
	 * !!!NOTICE!!! editAbleFrom 会在稍后编辑，就是说如果您的Set以后还要用，就要先复制到一个新的Set,比如HashSet之类的

	 * 如只需要简单分发 , 请调用{@link NfsAutoStoreRule#newStored(KeyShell...)}
	 * @param knownFromMap MAP<文件HASH key,已知不用发出的地址 from> from在调用后会发生添加修改;
	 */
	void newStored(Map<KeyShell,Set<KeyShell>> editAbleFromMap);
	
	/**
	 * 开始搜索
	 * @param func 返回调用的程序
	 * @param timeoutAdd 超时时间
	 * @param filehash 文件HASH
	 */
	void newSeeking(BiConsumer<KeyShell,byte[]> func,long timeoutAdd,KeyShell... filehash);
	//void endSeeking(BiConsumer<byte[],byte[]> func,byte[] key,byte[] data);//强制异步处理;
	
	
	/**
	 * 当本地有文件添加时，告诉policy这个文件已近有了
	 * @param fileHash
	 * @return 一个要数据回调函数
	 */
	BiConsumer<KeyShell, byte[]> fireLocalFileAdded(KeyShell fileHash);

}
